<template>
  <el-dialog title="选择服务商可见范围" :close-on-click-modal="false"
             :close-on-press-escape="false" :visible.sync="visible" lock-scroll width="800px"
             class="JNPF-dialog JNPF-dialog_center">
    <el-row :gutter="15" class=" main" :style="{margin: '0 auto',width: '100%'}">
      <el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small" label-width="100px"
               label-position="top">
        <template v-if="!loading">
          <!-- 具体表单 -->
          <el-col :span="24">
            <jnpf-form-tip-item
              label="企业名称" prop="enterpriseName">
              <JnpfInput v-model="dataForm.enterpriseName" @change="changeData('enterpriseName',-1)"
                         placeholder="请输入" clearable :style='{"width":"100%"}' readonly>
              </JnpfInput>
            </jnpf-form-tip-item>
          </el-col>
          <el-col :span="24">
            <jnpf-form-tip-item
              label="服务商可见范围" tipLabel="可见范围指平台内的已注册使用的服务商" prop="viewRange">
              <JnpfRadio v-model="dataForm.viewRange" @change="changeData('viewRange',-1)"
                         optionType="default" direction="horizontal" size="small" :options="viewRangeOptions"
                         :props="viewRangeProps">
              </JnpfRadio>
            </jnpf-form-tip-item>
          </el-col>
          <el-col :span="24" v-if="dataForm.viewRange == 'part'">
            <jnpf-form-tip-item
              label="指定服务商可见" prop="viewServer">
              <JnpfPopupTableSelect v-model="dataForm.viewServer" @change="changeData('viewServer',-1)"
                                    :rowIndex="null" :formData="dataForm" :templateJson="interfaceRes.viewServer"
                                    placeholder="请选择" propsValue="userId" popupWidth="800px" popupTitle="选择数据"
                                    popupType="popover" relationField='company_name' field='viewServer'
                                    interfaceId="521676952449319429" :pageSize="20"
                                    :columnOptions="viewServercolumnOptions" clearable :style='{"width":"100%"}'
                                    :multiple="true">
              </JnpfPopupTableSelect>
            </jnpf-form-tip-item>
          </el-col>
          <!-- 表单结束 -->
        </template>
      </el-form>
      <SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
                    ref="selectDialog" @select="addForSelect" @close="selectDialogVisible=false"/>
    </el-row>
    <span slot="footer" class="dialog-footer">
<!--      <el-button @click="visible = false">{{ $t('common.cancelButton') }}</el-button>-->
      <el-button type="primary" @click="dataFormSubmit()">
        {{ $t('common.confirmButton') }}</el-button>
      <!--      <el-button @click="clearData">重置</el-button>-->
    </span>

  </el-dialog>
</template>


<script>
import request from '@/utils/request'
import {mapGetters} from "vuex";
import {getDataInterfaceRes} from '@/api/systemData/dataInterface'
import {getDictionaryDataSelector} from '@/api/systemData/dictionary'
import {getDefaultCurrentValueUserId} from '@/api/permission/user'
import {getDefaultCurrentValueDepartmentId} from '@/api/permission/organize'
import {
  getDateDay,
  getLaterData,
  getBeforeData,
  getBeforeTime,
  getLaterTime
} from '@/components/Generator/utils/index.js'
import {thousandsFormat} from "@/components/Generator/utils/index"
import request2 from "@/utils/request2";

export default {
  components: {},
  props: [],
  data() {
    return {
      dataFormSubmitType: 0,
      continueBtnLoading: false,
      index: 0,
      prevDis: false,
      nextDis: false,
      allList: [],
      visible: false,
      loading: false,
      btnLoading: false,
      formRef: 'formRef',
      setting: {},
      eventType: '',
      userBoxVisible: false,
      selectDialogVisible: false,
      currTableConf: {},
      dataValueAll: {},
      addTableConf: {},
      //可选范围默认值
      ableAll: {},
      tableRows: {},
      Vmodel: "",
      currVmodel: "",
      dataForm: {
        enterpriseName: this.$route.query.companyName,
        viewRange: undefined,
        viewServer: [],
      },
      tableRequiredData: {},
      dataRule:
        {
          enterpriseName: [
            {
              required: true,
              message: '请输入',
              trigger: 'blur'
            },
          ],
          viewRange: [
            {
              required: true,
              message: '不能为空',
              trigger: 'change'
            },
          ],
          viewServer: [
            {
              required: true,
              message: '请至少选择一个',
              trigger: 'change'
            },
          ],
        },
      // viewRangeOptions: [{"fullName": "公开", "id": "all"}, { "fullName": "不公开", "id": "only" }, {"fullName": "部分服务商可见", "id": "part"}],
      viewRangeOptions: [{"fullName": "公开", "id": "all"}, {"fullName": "部分服务商可见", "id": "part"}],
      viewRangeProps: {"label": "fullName", "value": "id"},
      viewServercolumnOptions: [{"label": "服务商名称", "value": "company_name"}, {
        "label": "服务商类型",
        "value": "type"
      },],
      childIndex: -1,
      isEdit: false,
      interfaceRes: {
        enterpriseName: [],
        viewRange: [],
        viewServer: [],
      },
    }
  },
  computed: {
    ...mapGetters(['userInfo'])
  },
  watch: {},
  created() {
    this.dataAll()
    this.initDefaultData()
    this.init('', false, '')
    this.dataValueAll = JSON.parse(JSON.stringify(this.dataForm))
  },
  mounted() {
  },
  methods: {
    prev() {
      this.index--
      if (this.index === 0) {
        this.prevDis = true
      }
      this.nextDis = false
      for (let index = 0; index < this.allList.length; index++) {
        const element = this.allList[index];
        if (this.index == index) {
          this.getInfo(element.id)
        }
      }
    },
    next() {
      this.index++
      if (this.index === this.allList.length - 1) {
        this.nextDis = true
      }
      this.prevDis = false
      for (let index = 0; index < this.allList.length; index++) {
        const element = this.allList[index];
        if (this.index == index) {
          this.getInfo(element.id)
        }
      }
    },
    getInfo(id) {
      request({
        url: '/api/example/Used_company_view_range/' + id,
        method: 'get'
      }).then(res => {
        this.dataInfo(res.data)
      });
    },
    changeData(model, index) {
      this.isEdit = false
      this.childIndex = index
      let modelAll = model.split("-");
      let faceMode = "";
      for (let i = 0; i < modelAll.length; i++) {
        faceMode += modelAll[i];
      }
      for (let key in this.interfaceRes) {
        if (key != faceMode) {
          let faceReList = this.interfaceRes[key]
          for (let i = 0; i < faceReList.length; i++) {
            if (faceReList[i].relationField == model) {
              let options = 'get' + key + 'Options';
              if (this[options]) {
                this[options]()
              }
              this.changeData(key, index)
            }
          }
        }
      }
    },
    changeDataFormData(type, data, model, index, defaultValue) {
      if (!this.isEdit) {
        if (type == 2) {
          for (let i = 0; i < this.dataForm[data].length; i++) {
            if (index == -1) {
              this.dataForm[data][i][model] = defaultValue
            } else if (index == i) {
              this.dataForm[data][i][model] = defaultValue
            }
          }
        } else {
          this.dataForm[data] = defaultValue
        }
      }
    },
    dataAll() {
    },
    goBack() {
      this.$emit('refresh')
    },
    clearData() {
      this.dataForm = JSON.parse(JSON.stringify(this.dataValueAll))
    },
    init(id, isDetail, allList) {
      this.prevDis = false
      this.nextDis = false
      this.allList = allList || []
      if (allList.length) {
        this.index = this.allList.findIndex(item => item.id === id)
        if (this.index == 0) {
          this.prevDis = true
        }
        if (this.index == this.allList.length - 1) {
          this.nextDis = true
        }
      } else {
        this.prevDis = true
        this.nextDis = true
      }
      this.dataForm.id = id || 0;
      this.visible = true;
      this.$nextTick(() => {
        if (this.dataForm.id) {
          this.loading = true
          request({
            url: '/api/example/Used_company_view_range/' + this.dataForm.id,
            method: 'get'
          }).then(res => {
            this.dataInfo(res.data)
            this.loading = false
          });
        } else {
          this.clearData()
          this.initDefaultData()
        }
      });
      this.$store.commit('generator/UPDATE_RELATION_DATA', {})
    },
    //初始化默认数据
    initDefaultData() {

    },
    // 加入需方市场
    addXMarket() {
      // 构建完整的 URL
      request2({
        url: `/fzzxqy/join_portal_company?ecode=` + this.$route.query.ecode,
        method: 'get',
      }).then(responseData => {
        // 处理接口返回的数据
        console.log("responseData: " + JSON.stringify(responseData));
        // 判断返回值并进行相应提示
        if (responseData.data === '1') {
          // onlineUtils.toast('提示：已加入，请勿重复操作', 'info', 3000);
          this.$message({
            type: 'info',
            message: '提示：已加入，请勿重复操作',
            duration: 3000
          });
        } else if (responseData.data === '0') {
          // 弹出可见范围选择框
          // this.$router.push('/extend/used_company_view_range');
          // this.$router.push({path: '/extend/used_company_view_range', query: {companyName}});
          this.$message({
            type: 'success',
            message: '新增成功',
            duration: 3000
          });
          // onlineUtils.toast('新增成功', 'success', 3000);
          // 如果有需要，可以在这里进行其他操作，比如刷新页面等
          // refresh(); // 举例，具体操作根据需求修改
          //   跳回上一个页面
          location.href = "/model/CompanyList";
        } else {
          // onlineUtils.toast('错误：插入失败，请重试', 'error', 3000);
          this.$message({
            type: 'error',
            message: '错误：插入失败，请重试',
            duration: 3000
          });
        }
      }).catch(error => {
        // 处理请求错误
        console.error('网络请求出错:', error.message);
        // 在这里可以添加错误处理逻辑，比如显示详细错误信息
        // onlineUtils.toast(`错误：${error.message}`);
        this.$message({
          type: 'error',
          message: error.message
        });
      });

    },
// 表单提交
    dataFormSubmit(type) {
      this.dataFormSubmitType = type ? type : 0
      this.$refs['formRef'].validate((valid) => {
        if (valid) {
          this.request()
        }
      })
    }
    ,
    request() {
      let _data = this.dataList()
      if (this.dataFormSubmitType == 2) {
        this.continueBtnLoading = true
      } else {
        this.btnLoading = true
      }
      if (this.dataForm.enterpriseName) {
        let query = {
          "paramList": [
            {
              "id": "tyTUXw1",
              "field": "Enterprise_name",
              "defaultValue": _data.enterpriseName,
              "fieldName": "被改造企业名称",
              "dataType": "varchar", "required": 0
            },
            {
              "id": "gDZUXw1",
              "field": "f_view_range",
              "defaultValue": _data.viewRange,
              "fieldName": "可见范围",
              "dataType": "varchar", "required": 0
            },
            {
              "id": "LNwUXw1",
              "field": "f_view_server",
              "defaultValue": _data.viewServer,
              "fieldName": "指定服务商",
              "dataType": "varchar",
              "required": 0
            }], "tenantId": "", "origin": "preview"
        }
        //接口
        getDataInterfaceRes("522335759093465605", query).then(res => {
          if (_data.viewRange == "part") {
            this.sendMessage(_data.viewServer)
          } else {
            this.addXMarket()
          }

        })
      }
    },

    sendMessage(viewServer) {
      const _data = {
        "viewServer": viewServer
      }
      request2({
        url: '/fzzxqyz/messageToServer',
        method: 'post',
        data: _data
      }).then((res) => {
        this.addXMarket()
        // this.$message({
        //   message: res.message == "success" ? "设置成功" : res.message,
        //   type: res.message,
        //   duration: 1000,
        //   onClose: () => {
        //     if (this.dataFormSubmitType == 2) return this.continueBtnLoading = false
        //     this.visible = false
        //     this.btnLoading = false
        //     location.href = "/model/CompanyList";
        //     // this.$emit('refresh', true)
        //   }
        // })
      }).catch(() => {
        this.btnLoading = false
        this.continueBtnLoading = false
      })
    },
    openSelectDialog(key) {
      this.currTableConf = this.addTableConf[key]
      this.currVmodel = key
      this.selectDialogVisible = true
      this.$nextTick(() => {
        this.$refs.selectDialog.init()
      })
    },
    addForSelect(data) {
      for (let i = 0; i < data.length; i++) {
        let t = data[i]
        if (this['get' + this.currVmodel]) {
          this['get' + this.currVmodel](t)
        }
      }
    }
    ,
    dateTime(timeRule, timeType, timeTarget, timeValueData, dataValue) {
      let timeDataValue = null;
      let timeValue = Number(timeValueData)
      if (timeRule) {
        if (timeType == 1) {
          timeDataValue = timeValue
        } else if (timeType == 2) {
          timeDataValue = dataValue
        } else if (timeType == 3) {
          timeDataValue = new Date().getTime()
        } else if (timeType == 4) {
          let previousDate = '';
          if (timeTarget == 1 || timeTarget == 2) {
            previousDate = getDateDay(timeTarget, timeType, timeValue)
            timeDataValue = new Date(previousDate).getTime()
          } else if (timeTarget == 3) {
            previousDate = getBeforeData(timeValue)
            timeDataValue = new Date(previousDate).getTime()
          } else {
            timeDataValue = getBeforeTime(timeTarget, timeValue).getTime()
          }
        } else if (timeType == 5) {
          let previousDate = '';
          if (timeTarget == 1 || timeTarget == 2) {
            previousDate = getDateDay(timeTarget, timeType, timeValue)
            timeDataValue = new Date(previousDate).getTime()
          } else if (timeTarget == 3) {
            previousDate = getLaterData(timeValue)
            timeDataValue = new Date(previousDate).getTime()
          } else {
            timeDataValue = getLaterTime(timeTarget, timeValue).getTime()
          }
        }
      }
      return timeDataValue;
    }
    ,
    time(timeRule, timeType, timeTarget, timeValue, formatType, dataValue) {
      let format = formatType == 'HH:mm' ? 'HH:mm:00' : formatType
      let timeDataValue = null
      if (timeRule) {
        if (timeType == 1) {
          timeDataValue = timeValue || '00:00:00'
          if (timeDataValue.split(':').length == 3) {
            timeDataValue = timeDataValue
          } else {
            timeDataValue = timeDataValue + ':00'
          }
        } else if (timeType == 2) {
          timeDataValue = dataValue
        } else if (timeType == 3) {
          timeDataValue = this.jnpf.toDate(new Date(), format)
        } else if (timeType == 4) {
          let previousDate = '';
          previousDate = getBeforeTime(timeTarget, timeValue)
          timeDataValue = this.jnpf.toDate(previousDate, format)
        } else if (timeType == 5) {
          let previousDate = '';
          previousDate = getLaterTime(timeTarget, timeValue)
          timeDataValue = this.jnpf.toDate(previousDate, format)
        }
      }
      return timeDataValue;
    }
    ,
    dataList() {
      var _data = this.dataForm;
      return _data;
    }
    ,
    dataInfo(dataAll) {
      let _dataAll = dataAll
      this.dataForm = _dataAll
      this.isEdit = true
      this.dataAll()
      this.childIndex = -1
    }
    ,
  },
}

</script>
